Jackson-এর Dynamic Filtering একটি শক্তিশালী বৈশিষ্ট্য যা ব্যবহারকারীদের JSON Serialization প্রক্রিয়া চলাকালীন কনফিগারযোগ্যভাবে নির্দিষ্ট ফিল্ডগুলোর অন্তর্ভুক্তি বা বাদ দেওয়ার সুযোগ দেয়। এর মাধ্যমে, নির্দিষ্ট সময়ে (যেমন, API কলের সময়ে) কোন ফিল্ডগুলো JSON-এ অন্তর্ভুক্ত করা হবে তা নির্ধারণ করা যায়।
Jackson-এ Dynamic Filtering করার জন্য @JsonFilter এবং FilterProvider ব্যবহৃত হয়।
Dynamic Filtering-এর প্রয়োজনীয়তা
Dynamic Filtering প্রয়োজন হয় যখন:
- আপনি কিছু ফিল্ড সাধারণত JSON আউটপুটে অন্তর্ভুক্ত করতে চান, তবে কিছু ক্ষেত্রে সেগুলি বাদ দিতে চান।
- আপনি একটি একক ক্লাসের উপর বিভিন্ন ধরনের ফিল্টার প্রয়োগ করতে চান নির্দিষ্ট কন্ডিশনের উপর ভিত্তি করে।
- আপনি field-based বা attribute-based filter প্রয়োগ করতে চান।
@JsonFilter Annotation
@JsonFilter অ্যানোটেশনটি Jackson এর মধ্যে ফিল্টার ব্যবস্থাপনা করতে ব্যবহৃত হয়। এটি একটি নাম নির্ধারণ করে, যা পরে JSON সিরিয়ালাইজেশনের সময় নির্দিষ্ট ফিল্ডকে include বা exclude করার জন্য ব্যবহৃত হয়।
ধাপ ১: @JsonFilter ব্যবহার করা
@JsonFilterঅ্যানোটেশনটি ক্লাসে ব্যবহার করা হয়।- ফিল্টারের নাম নির্ধারণ করতে হয়।
উদাহরণ:
import com.fasterxml.jackson.annotation.JsonFilter;
@JsonFilter("userFilter")
public class User {
private int id;
private String name;
private String email;
// Constructors
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
- এখানে,
Userক্লাসে@JsonFilter("userFilter")অ্যানোটেশন ব্যবহার করা হয়েছে, যা পরে ফিল্টার প্রয়োগ করার সময় ব্যবহার করা হবে।
ধাপ ২: SimpleBeanPropertyFilter এবং FilterProvider ব্যবহার করে Dynamic Filtering কনফিগার করা
Jackson-এ Dynamic Filtering বাস্তবায়ন করতে, আপনাকে SimpleBeanPropertyFilter এবং FilterProvider ব্যবহার করতে হবে। এই দুটি ক্লাস ফিল্টার কনফিগার করতে ব্যবহৃত হয়।
কোড উদাহরণ:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
public class DynamicFilteringExample {
public static void main(String[] args) throws Exception {
User user = new User(1, "John Doe", "john.doe@example.com");
// Create ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();
// Create the filter
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));
// Apply the filter during serialization
String json = mapper.writer(filters).writeValueAsString(user);
// Print JSON output
System.out.println(json);
}
}
JSON Output (with dynamic filtering):
{
"id": 1,
"name": "John Doe"
}
ব্যাখ্যা:
SimpleBeanPropertyFilter.filterOutAllExcept("id", "name")ব্যবহার করেUserঅবজেক্টেরidএবংnameফিল্ডগুলিকে JSON আউটপুটে অন্তর্ভুক্ত করা হয়েছে এবংemailফিল্ডটি বাদ দেওয়া হয়েছে।@JsonFilter("userFilter")এর মাধ্যমে ফিল্টারের নামuserFilterনির্ধারণ করা হয়েছে এবং এটিSimpleFilterProviderএর সাথে সংযুক্ত করা হয়েছে।
@JsonFilter এর অন্য সুবিধা
- Field Level Filtering:
@JsonFilterঅ্যানোটেশনটি ব্যবহার করে আপনার ক্লাসে সব ফিল্ডের উপর dynamic filtering প্রয়োগ করা যায়, যা runtime-এ নির্ধারণ করা হয়।
- Runtime Filtering:
- ফিল্টারটি runtime-এ নির্ধারণ করতে পারবেন, যা বিশেষ পরিস্থিতিতে ব্যবহৃত হতে পারে (যেমন, API কলের ভিত্তিতে নির্দিষ্ট ফিল্ডের প্রয়োজনীয়তা)।
- Multiple Filters:
- আপনি একাধিক ফিল্টার কনফিগার করতে পারেন এবং প্রয়োজনে একাধিক ফিল্টারের সাথে কাজ করতে পারবেন। Jackson ফিল্টার ব্যবস্থাপনায় কাস্টম ফিল্টারিং সহজভাবে তৈরি করা সম্ভব।
Spring Boot এ Dynamic Filtering
Spring Boot এ Dynamic Filtering ব্যবহারের জন্য @JsonFilter অ্যানোটেশন এবং FilterProvider ব্যবহার করতে পারেন। Spring REST Controller-এ ফিল্টারিং করা যাবে।
Spring Boot Controller Example:
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@GetMapping("/user")
public String getUser() throws Exception {
User user = new User(1, "John Doe", "john.doe@example.com");
// Create ObjectMapper instance
ObjectMapper mapper = new ObjectMapper();
// Create the filter
SimpleFilterProvider filters = new SimpleFilterProvider();
filters.addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));
// Apply the filter during serialization
return mapper.writer(filters).writeValueAsString(user);
}
}
API Response (with dynamic filtering):
{
"id": 1,
"name": "John Doe"
}
@JsonFilter এবং @JsonIgnore এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | @JsonFilter | @JsonIgnore |
|---|---|---|
| ব্যবহার | Dynamic Filtering (Runtime Control) | স্ট্যাটিকভাবে ফিল্ড বা প্রপার্টি বাদ দেওয়ার জন্য |
| ফিল্ড লেভেল | হ্যাঁ, এটি ম্যানুয়ালি কনফিগার করা যায় | সরাসরি কোনো ফিল্ডে প্রয়োগ করা যায় |
| ফিল্টারিং কনফিগারেশন | ফিল্টার Provider দিয়ে কাস্টম কনফিগার করা হয় | সরাসরি @JsonIgnore দ্বারা বাদ দেওয়া হয় |
- Dynamic Filtering Jackson-এর একটি শক্তিশালী বৈশিষ্ট্য যা runtime-এ JSON ফিল্ডের অন্তর্ভুক্তি বা বাদ দেওয়ার সক্ষমতা প্রদান করে।
@JsonFilterঅ্যানোটেশন এবংSimpleBeanPropertyFilterএর সাহায্যে নির্দিষ্ট ফিল্ডগুলোকে বাদ বা অন্তর্ভুক্ত করা যায়।FilterProviderব্যবহার করে ফিল্টার কনফিগারেশন নিয়ন্ত্রণ করা সম্ভব।- Spring Boot-এ
@JsonFilterব্যবহার করে API-তে dynamic JSON filtering সহজভাবে করা যায়।
Read more